import Vue from 'vue'
import App from './App.vue'
import router from './router'

Vue.config.productionTip = false
// 1. 导入组件库
import Vant from 'vant'
// 2. 引入组件 css 文件
import 'vant/lib/index.css'
// 3. 注册 vant ui 组件库的标签

// 引入请求库 axios
import axios from "axios";
axios.defaults.baseURL = 'http://127.0.0.1:3000'
// 使用请求拦截器, 统一添加 token
// axios 请求拦截器,请求拦截器和响应拦截器一样,最后一定要return出来,否则会卡在那里
axios.interceptors.request.use(config => {  //请求配置拦截器
  // 相当于在每次请求时,发现有token但没有设headers.Authorization,就帮他加上
  if (!config.headers.Authorization && localStorage.getItem('token')) {
    config.headers.Authorization = localStorage.getItem('token');
  }
  return config;
})

import { Dialog } from 'vant'
// axios响应拦截器
//不单单只有一个页面或者一个接口用到, 所有接口一旦出问题,都会进行处理
axios.interceptors.response.use(res => {  //响应拦截器
  const { statusCode, message } = res.data
  if (message !== "用户不存在" && statusCode == 401) {
    Dialog({ message: message });
    localStorage.removeItem('token')
    localStorage.removeItem('id')
    router.replace('./login')
  }
  return res
})
// 绑定到原型
Vue.prototype.$axios = axios;
Vue.use(Vant)


//设置路由防问权限
// 到少要next() 一下都重定向,否则会卡在那里
router.beforeEach((to, from, next) => {
  const hasToken = localStorage.getItem('token')
  var tohtml = ['/index', 'compile']
  if (tohtml.indexOf(to.path) != -1) {
    if (hasToken) {
      return next()
    } else {
      return router.push('/login')
    }
  } else {
    next()
  }

})

//全局图片url过滤器
Vue.filter('fixImgUrl', function (url) {
  const fullUrlReg = /^http/;
  if (fullUrlReg.test(url)) {
    return url;
  } else {
    return axios.defaults.baseURL + url
  }
})

new Vue({
  router,
  render: function (h) { return h(App) }
}).$mount('#app')
